package com.mango.request.beans;

import java.util.List;
import java.util.Map;

public class AdvertBean {
    public boolean hasDone;
    // 基本信息
    public AdBaseBean adBaseInfo;
    // 素材信息
    public AdMaterialBean adMaterialInfo;
    // 操作信息
    public AdConversionBean adConversionInfo;

    public static class AdBaseBean {
        public int adid;
        // 广告创意ID
        public int creativeId;
        // 广告标题
        public String adTitle;
        // 广告描述(即广告语)
        public String adDescription;
        // 操作类型(1:APP下载 2:H5 3:优量汇下载)
        public int adOperationType;
        // 展示时长(用于X秒后显示关闭按钮)
        public int adShowDuration;
        // 点击按钮文本描述
        public String adActionDescription;
        // 应用名称
        public String appName;
        // 应用图标
        public String appIconUrl;
        // 应用包名
        public String appPackageName;
        // 应用评分
        public int appScore;
        // 应用大小
        public int appSize;
        // 上报链接
        public Map<ActionType, String[]> convUrl;
        // 有效时间(单位:秒)，过期判定为无效上报
        public int expirationTime;
        // 积分
        public int integral;
        // 竞价类型
        public int biddingType;
        // 价格
        public int price;
    }

    public static class AdMaterialBean {
        // 广告素材总体类型(1:视频 2:图片)
        public int materialType;
        // 具体素材信息
        public List<AdMaterialFeatureBean> materialFeature;
    }

    public static class AdConversionBean {
        // 广告DeepLink链接(优先使用此字段)
        public String deeplinkUrl;

        // 当DeepLink为空，则判定adOperationType
        // 广告H5链接(adOperationType=2)
        public String h5Url;
        // 广告APP下载链接(adOperationType=1 || adOperationType=3)
        // 当adOperationType=3时，使用appDownloadUrl请求得到JSON，返回数据中的dstlink才是真实的下载地址
        public String appDownloadUrl;
    }

    public static class AdMaterialSizeBean {
        // 素材宽度
        public int width;
        // 素材高度
        public int height;
    }

    public static class AdMaterialFeatureBean {
        // 视频播放过程中是否可以点击
        public int clickable;
        // 当前素材类型(1:视频 2:图片)
        public int featureType;
        // 当前素材地址
        public String materialUrl;
        // 视频素材封面
        public String coverUrl;
        // 视频素材封面类型(1:图片 2:HTML 3:跳转URL)
        public int coverType;
        // 视频素材播放时长
        public int videoDuration;
        // 素材宽高
        public AdMaterialSizeBean materialSize;
        // 尾帧页面倒计时开关
        public int countdownType;
        // 自动唤起开关
        public int videoDPType;
        // 激励视频播放到多少秒时自动唤起(当videoDPType=0时有效)
        public int videoSecond;
        // 视频素材样式(0:竖屏 1:横屏)
        public int videoStyle;
    }

    public enum ActionType {
        UNKNOWN, SHOW, CLOSE,
        PLAY_START, PLAY_END, PLAY_STOP,
        CLICK, CLICK_DEEPLINK,
        DOWN_START, DOWN_END, DOWN_STOP, DOWN_CONTINUE, DOWN_DELETE,
        INSTALL_START, INSTALL_END, ACTIVATION;

        public static ActionType getType(String name) {
            switch (name) {
                case "show":
                    // 曝光上报（视频类型广告展示上报需要在视频播放完成之后，显示中间 endCard 时触发）
                    return SHOW;
                case "closeAd":
                    //关闭广告
                    return CLOSE;
                case "startPlay":
                    //开始播放
                    return PLAY_START;
                case "endPlay":
                    //播放完成
                    return PLAY_END;
                case "stopPlay":
                    //播放中途关闭
                    return PLAY_STOP;
                case "click":
                    //点击上报（视频类型需要在用户点击 endCard 时触发）
                    return CLICK;
                case "deeplinkClick":
                    //deeplink调起成功上报
                    return CLICK_DEEPLINK;
                case "startDown":
                    //开始下载
                    return DOWN_START;
                case "endDown":
                    //下载完成
                    return DOWN_END;
                case "stopDown":
                    //暂停下载
                    return DOWN_STOP;
                case "continueDown":
                    //继续下载
                    return DOWN_CONTINUE;
                case "deleteDown":
                    //删除下载
                    return DOWN_DELETE;
                case "startInstall":
                    //开始安装
                    return INSTALL_START;
                case "endInstall":
                    //安装完成
                    return INSTALL_END;
                case "activation":
                    //激活(打开应用)
                    return ACTIVATION;
                default:
                    return UNKNOWN;
            }
        }
    }
}
